//
// Created by 32827 on 2023/11/15.
//

#ifndef YZFRAME_YZ_GPIO_H
#define YZFRAME_YZ_GPIO_H
#include "yzf.h"
#ifdef __cplusplus
extern "C" {
#endif
#define YZF_GPIOA HR_GPIOA_BASE_ADDR
#define YZF_GPIOB HR_GPIOB_BASE_ADDR
#define YZF_GPIO_PIN_0 (1UL<<0)
#define YZF_GPIO_PIN_1 (1UL<<1)
#define YZF_GPIO_PIN_2 (1UL<<2)
#define YZF_GPIO_PIN_3 (1UL<<3)
#define YZF_GPIO_PIN_4 (1UL<<4)
#define YZF_GPIO_PIN_5 (1UL<<5)
#define YZF_GPIO_PIN_6 (1UL<<6)
#define YZF_GPIO_PIN_7 (1UL<<7)
#define YZF_GPIO_PIN_8 (1UL<<8)
#define YZF_GPIO_PIN_9 (1UL<<9)
#define YZF_GPIO_PIN_10 (1UL<<10)
#define YZF_GPIO_PIN_11 (1UL<<11)   
#define YZF_GPIO_PIN_12 (1UL<<12)
#define YZF_GPIO_PIN_13 (1UL<<13)
#define YZF_GPIO_PIN_14 (1UL<<14)
#define YZF_GPIO_PIN_15 (1UL<<15)
#define YZF_GPIO_PIN_16 (1UL<<16)
#define YZF_GPIO_PIN_17 (1UL<<17)
#define YZF_GPIO_PIN_18 (1UL<<18)
#define YZF_GPIO_PIN_19 (1UL<<19)
#define YZF_GPIO_PIN_20 (1UL<<20)
#define YZF_GPIO_PIN_21 (1UL<<21)
#define YZF_GPIO_PIN_22 (1UL<<22)
#define YZF_GPIO_PIN_23 (1UL<<23)
#define YZF_GPIO_PIN_24 (1UL<<24)
#define YZF_GPIO_PIN_25 (1UL<<25)
#define YZF_GPIO_PIN_26 (1UL<<26)
#define YZF_GPIO_PIN_27 (1UL<<27)
#define YZF_GPIO_PIN_28 (1UL<<28)
#define YZF_GPIO_PIN_29 (1UL<<29)
#define YZF_GPIO_PIN_30 (1UL<<30)
#define YZF_GPIO_PIN_31 (1UL<<31)

YZF_RESULT yzf_gpio_open_clock(YZF_GPIO_POINTER gpio);
YZF_RESULT yzf_gpio_close_clock(YZF_GPIO_POINTER gpio);
YZF_RESULT yzf_gpio_set_PP(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_OD(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_AFPP(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_AFOD(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_IN_FLOAT(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_IN_PULL_UP(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_IN_PULL_DOWN(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_OUT_PULL_UP(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_OUT_PULL_DOWN(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_IN_ANALOG(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_MIDDLE(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_LOW(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_HIGH(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_0(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_BOOL yzf_gpio_get(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set_1(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_set0(YZF_GPIO_POINTER gpio,uint16_t pin);
YZF_RESULT yzf_gpio_set1(YZF_GPIO_POINTER gpio,uint16_t pin);
YZF_RESULT yzf_gpio_lock(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_unlock(YZF_GPIO_POINTER gpio,YZF_GPIO_PIN pin);
/**
 * 便捷调用模式
 * 将通过yzf_gpio()指定后可调用便捷方式
 * */
YZF_RESULT yzf_gpio(YZF_GPIO_POINTER gpio);
YZF_RESULT yzf_gpio_pin(YZF_GPIO_PIN pin);
YZF_RESULT yzf_gpio_open_clock_();
YZF_RESULT yzf_gpio_close_clock_();
YZF_RESULT yzf_gpio_set_PP_();
YZF_RESULT yzf_gpio_set_OD_();
YZF_RESULT yzf_gpio_set_AFPP_();
YZF_RESULT yzf_gpio_set_AFOD_();
YZF_RESULT yzf_gpio_set_IN_FLOAT_();
YZF_RESULT yzf_gpio_set_IN_PULL_UP_();
YZF_RESULT yzf_gpio_set_IN_PULL_DOWN_();
YZF_RESULT yzf_gpio_set_OUT_PULL_UP_();
YZF_RESULT yzf_gpio_set_OUT_PULL_DOWN_();
YZF_RESULT yzf_gpio_set_IN_ANALOG_();
YZF_RESULT yzf_gpio_set_MIDDLE_();
YZF_RESULT yzf_gpio_set_LOW_();
YZF_RESULT yzf_gpio_set_HIGH_();
YZF_RESULT yzf_gpio_set_0_();
YZF_RESULT yzf_gpio_set_1_();
YZF_RESULT yzf_gpio_lock_();
YZF_RESULT yzf_gpio_unlock_();
YZF_BOOL yzf_gpio_get_();
#define YGPIO(n) yzf_gpio(n);
#define YPIN(n) yzf_gpio_pin(n);

#ifdef __cplusplus
}
#endif
#endif //YZFRAME_YZ_GPIO_H